package org.an.demo.module;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * 但是请注意，这里有一个坑：默认生成的模板类的对象只支持为 in 的定向 tag 。
 * 为什么呢？因为默认生成的类里面只有 writeToParcel() 方法，而如果要支持为 out 或者 inout 的定向 tag 的话，
 * 还需要实现 readFromParcel() 方法——而这个方法其实并没有在 Parcelable 接口里面，所以需要我们从头写
 */
public class Book implements Parcelable {
  public String id;

  public String name;

  //============================

  @Override public int describeContents() {
    return 0;
  }

  @Override public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(this.id);
    dest.writeString(this.name);
  }

  /**
   * 参数是一个Parcel,用它来存储与传输数据
   */
  public void readFromParcel(Parcel dest) {
    //注意，此处的读值顺序应当是和writeToParcel()方法中一致的
    id = dest.readString();
    name = dest.readString();
  }

  public Book() {
  }

  protected Book(Parcel in) {
    this.id = in.readString();
    this.name = in.readString();
  }

  public static final Creator<Book> CREATOR = new Creator<Book>() {
    @Override public Book createFromParcel(Parcel source) {
      return new Book(source);
    }

    @Override public Book[] newArray(int size) {
      return new Book[size];
    }
  };

  @Override public String toString() {
    return "Book{" +
        "id='" + id + '\'' +
        ", name='" + name + '\'' +
        '}';
  }
}